home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / zggsvp.z / zggsvp
Text File  |  1996-03-14  |  6KB  |  199 lines

  1.  
  2.  
  3.  
  4. ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ZGGSVP - compute unitary matrices U, V and Q such that   N-K-L K L
  10.      U'*A*Q = K ( 0 A12 A13 ) if M-K-L >= 0
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      SUBROUTINE ZGGSVP( JOBU, JOBV, JOBQ, M, P, N, A, LDA, B, LDB, TOLA, TOLB,
  14.                         K, L, U, LDU, V, LDV, Q, LDQ, IWORK, RWORK, TAU, WORK,
  15.                         INFO )
  16.  
  17.          CHARACTER      JOBQ, JOBU, JOBV
  18.  
  19.          INTEGER        INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P
  20.  
  21.          DOUBLE         PRECISION TOLA, TOLB
  22.  
  23.          INTEGER        IWORK( * )
  24.  
  25.          DOUBLE         PRECISION RWORK( * )
  26.  
  27.          COMPLEX*16     A( LDA, * ), B( LDB, * ), Q( LDQ, * ), TAU( * ), U(
  28.                         LDU, * ), V( LDV, * ), WORK( * )
  29.  
  30. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  31.      ZGGSVP computes unitary matrices U, V and Q such that
  32.                    L ( 0     0   A23 )
  33.                M-K-L ( 0     0    0  )
  34.  
  35.                       N-K-L  K    L
  36.              =     K ( 0    A12  A13 )  if M-K-L < 0;
  37.                  M-K ( 0     0   A23 )
  38.  
  39.                     N-K-L  K    L
  40.       V'*B*Q =   L ( 0     0   B13 )
  41.                P-L ( 0     0    0  )
  42.  
  43.      where the K-by-K matrix A12 and L-by-L matrix B13 are nonsingular upper
  44.      triangular; A23 is L-by-L upper triangular if M-K-L >= 0, otherwise A23
  45.      is (M-K)-by-L upper trapezoidal.  K+L = the effective numerical rank of
  46.      the (M+P)-by-N matrix (A',B')'.  Z' denotes the conjugate transpose of Z.
  47.  
  48.      This decomposition is the preprocessing step for computing the
  49.      Generalized Singular Value Decomposition (GSVD), see subroutine ZGGSVD.
  50.  
  51.  
  52. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  53.      JOBU    (input) CHARACTER*1
  54.              = 'U':  Unitary matrix U is computed;
  55.              = 'N':  U is not computed.
  56.  
  57.      JOBV    (input) CHARACTER*1
  58.              = 'V':  Unitary matrix V is computed;
  59.              = 'N':  V is not computed.
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      JOBQ    (input) CHARACTER*1
  75.              = 'Q':  Unitary matrix Q is computed;
  76.              = 'N':  Q is not computed.
  77.  
  78.      M       (input) INTEGER
  79.              The number of rows of the matrix A.  M >= 0.
  80.  
  81.      P       (input) INTEGER
  82.              The number of rows of the matrix B.  P >= 0.
  83.  
  84.      N       (input) INTEGER
  85.              The number of columns of the matrices A and B.  N >= 0.
  86.  
  87.      A       (input/output) COMPLEX*16 array, dimension (LDA,N)
  88.              On entry, the M-by-N matrix A.  On exit, A contains the
  89.              triangular (or trapezoidal) matrix described in the Purpose
  90.              section.
  91.  
  92.      LDA     (input) INTEGER
  93.              The leading dimension of the array A. LDA >= max(1,M).
  94.  
  95.      B       (input/output) COMPLEX*16 array, dimension (LDB,N)
  96.              On entry, the P-by-N matrix B.  On exit, B contains the
  97.              triangular matrix described in the Purpose section.
  98.  
  99.      LDB     (input) INTEGER
  100.              The leading dimension of the array B. LDB >= max(1,P).
  101.  
  102.      TOLA    (input) DOUBLE PRECISION
  103.              TOLB    (input) DOUBLE PRECISION TOLA and TOLB are the thresholds
  104.              to determine the effective numerical rank of matrix B and a
  105.              subblock of A. Generally, they are set to TOLA =
  106.              MAX(M,N)*norm(A)*MAZHEPS, TOLB = MAX(P,N)*norm(B)*MAZHEPS.  The
  107.              size of TOLA and TOLB may affect the size of backward errors of
  108.              the decomposition.
  109.  
  110.      K       (output) INTEGER
  111.              L       (output) INTEGER On exit, K and L specify the dimension
  112.              of the subblocks described in Purpose section.  K + L = effective
  113.              numerical rank of (A',B')'.
  114.  
  115.      U       (output) COMPLEX*16 array, dimension (LDU,M)
  116.              If JOBU = 'U', U contains the unitary matrix U.  If JOBU = 'N', U
  117.              is not referenced.
  118.  
  119.      LDU     (input) INTEGER
  120.              The leading dimension of the array U. LDU >= max(1,M) if JOBU =
  121.              'U'; LDU >= 1 otherwise.
  122.  
  123.      V       (output) COMPLEX*16 array, dimension (LDV,M)
  124.              If JOBV = 'V', V contains the unitary matrix V.  If JOBV = 'N', V
  125.              is not referenced.
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          ZZZZGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  137.  
  138.  
  139.  
  140.      LDV     (input) INTEGER
  141.              The leading dimension of the array V. LDV >= max(1,P) if JOBV =
  142.              'V'; LDV >= 1 otherwise.
  143.  
  144.      Q       (output) COMPLEX*16 array, dimension (LDQ,N)
  145.              If JOBQ = 'Q', Q contains the unitary matrix Q.  If JOBQ = 'N', Q
  146.              is not referenced.
  147.  
  148.      LDQ     (input) INTEGER
  149.              The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ =
  150.              'Q'; LDQ >= 1 otherwise.
  151.  
  152.      IWORK   (workspace) INTEGER array, dimension (N)
  153.  
  154.      RWORK   (workspace) DOUBLE PRECISION array, dimension (2*N)
  155.  
  156.      TAU     (workspace) COMPLEX*16 array, dimension (N)
  157.  
  158.      WORK    (workspace) COMPLEX*16 array, dimension (max(3*N,M,P))
  159.  
  160.      INFO    (output) INTEGER
  161.              = 0:  successful exit
  162.              < 0:  if INFO = -i, the i-th argument had an illegal value.
  163.  
  164. FFFFUUUURRRRTTTTHHHHEEEERRRR DDDDEEEETTTTAAAAIIIILLLLSSSS
  165.      The subroutine uses LAPACK subroutine ZGEQPF for the QR factorization
  166.      with column pivoting to detect the effective numerical rank of the a
  167.      matrix. It may be replaced by a better rank determination strategy.
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.